package mumu.android.localstorage;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import mumu.android.R;
import mumu.android.lib.localstorage.NewsEn;
import mumu.android.lib.tool.MLog;
import mumu.android.lib.tool.Tools;

import org.xmlpull.v1.XmlPullParser;

import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Xml;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

/**
 * 
 * 之前已经介绍DOM和SAX解析xml方式，SAX解决了DOM大数据解析效率问题，但是SAX也有一个缺点，即解析过程不能中断，每次都会解析整个xml数据。
 * 在某些应用场景下，只要解析到所需数据后
 * ，就可以退出解析过程。SAX这种基于事件驱动回调的机制，只能等xml数据全部解析完成后才终止，造成不必要的程序执行和资源浪费。
 * 接下来介绍的Pull解析方式，就能很好的满足这种应用场景。
 * PUll解析器和SAX解析器相似，也是基于事件驱动的，不过它允许用户主动获取当前事件，并且由用户主动推动整个解析过程。在不需要解析数据时，即可停止解析。 
 * 
 */
public class xml_pull extends DialogFragment {

	static xml_pull instance;

	public static xml_pull getInstance() {
		if (instance == null) {
			instance = new xml_pull();
		}
		return instance;
	}

	Dialog dialog;
	TextView txt;

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		dialog = new Dialog(getActivity(), R.style.dialog);
		LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
		View view = layoutInflater.inflate(R.layout.dialog_listview, null);
		view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		dialog.setContentView(R.layout.dialog_listview);
		dialog.setCanceledOnTouchOutside(true);
		try {
			List<NewsEn> list = readXML(getActivity().getAssets().open("books.xml"));
			String string = "";
			for (int i = 0; i < list.size(); i++) {
				string += list.get(i).toString();

			}
			Tools.toast(getActivity(), string);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dialog;
	}

	public static List<NewsEn> readXML(InputStream xmlStr) throws Exception {
		List<NewsEn> list = new ArrayList<NewsEn>();
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(xmlStr, "UTF-8");
		int eventCode = parser.getEventType();
		// 结束文件解析
		while (eventCode != XmlPullParser.END_DOCUMENT) {
			switch (eventCode) {
			// 开始节点
			case XmlPullParser.START_TAG:
				MLog.d("dd", "START_TAG ：" + parser.getName());
				if ("node".equals(parser.getName().toLowerCase())) {
					NewsEn book = new NewsEn();
					int count = parser.getAttributeCount();
					for (int i = 0; i < count; i++) {
						String attrName = parser.getAttributeName(i).toLowerCase();
						String valString = parser.getAttributeValue(i);
						if ("defaultlogo".equals(attrName))
							book.defaultlogo = valString;
						if ("newstitle".equals(attrName))
							book.newstitle = valString;
					}
					list.add(book);
				}
				break;
			// 开始文档解析
			case XmlPullParser.START_DOCUMENT:
				MLog.d("dd", "START_DOCUMENT： " + parser.getName());
				break;
			// 结束节点
			case XmlPullParser.END_TAG:
				MLog.d("dd", "END_TAG： " + parser.getName());
				// 文本节点
				break;
			case XmlPullParser.TEXT:
				MLog.d("dd", "TEXT:" + parser.getText());
				break;
			case XmlPullParser.COMMENT:
				MLog.d("dd", "COMMENT:" + parser.getName());
				break;
			}
			// 下一个节点（主动解析下一条）,如果不想继续解析，可直接设置eventCode =
			// XmlPullParser.END_DOCUMENT;或者使用其他方式终止while循环即可
			eventCode = parser.next();
		}
		return list;
	}

}
